From 0a74f6a83281cbf05620eebf6c722727f5c6cd7c Mon Sep 17 00:00:00 2001 From: robertl Date: Sun, 9 Jan 2011 04:50:01 +0000 Subject: [PATCH] Rick Richardson adds read/write support for enhanced loc format from Groundspeak that adds diff, terrain, and container.. git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4047 f51c46e8-681c-474f-0cfe-069cfd0219fb --- gpsbabel/geo.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gpsbabel/geo.c b/gpsbabel/geo.c index 55ea7955b..c2a0bec0e 100644 --- a/gpsbabel/geo.c +++ b/gpsbabel/geo.c @@ -52,6 +52,7 @@ geo_read(void) static xg_callback wpt_s, wpt_e; static xg_callback wpt_link_s, wpt_link; static xg_callback wpt_name, wpt_name_s, wpt_type, wpt_coord; +static xg_callback wpt_diff, wpt_terr, wpt_container; static xg_tag_mapping loc_map[] = { @@ -63,6 +64,9 @@ xg_tag_mapping loc_map[] = { { wpt_link_s, cb_start, "/loc/waypoint/link" }, { wpt_link, cb_cdata, "/loc/waypoint/link" }, { wpt_coord, cb_start, "/loc/waypoint/coord" }, + { wpt_diff, cb_cdata, "/loc/waypoint/difficulty" }, + { wpt_terr, cb_cdata, "/loc/waypoint/terrain" }, + { wpt_container,cb_cdata, "/loc/waypoint/container" }, { NULL, 0, NULL } }; @@ -148,6 +152,37 @@ void wpt_coord(const char *args, const char **attrv) } } +void wpt_container(const char *args, const char **unused) +{ + int v; + + if (!args) return; + switch ( atoi(args) ) + { + case 1: v = gc_unknown; break; + case 2: v = gc_micro; break; + case 3: v = gc_regular; break; + case 4: v = gc_large; break; + case 5: v = gc_virtual;; break; + case 6: v = gc_other; break; + case 8: v = gc_small; break; + default: v = gc_unknown; break; + } + waypt_alloc_gc_data(wpt_tmp)->container = v; +} + +void wpt_diff(const char *args, const char **unused) +{ + if (!args) return; + waypt_alloc_gc_data(wpt_tmp)->diff = atof(args) * 10; +} + +void wpt_terr(const char *args, const char **unused) +{ + if (!args) return; + waypt_alloc_gc_data(wpt_tmp)->terr = atof(args) * 10; +} + static void geo_rd_init(const char *fname) { @@ -203,6 +238,27 @@ geo_waypt_pr(const waypoint *waypointp) tmp); xfree(tmp); } + if (waypointp->gc_data) + { + int v; + + gbfprintf(ofd, "%.1lf\n", + waypointp->gc_data->diff / 10.0); + gbfprintf(ofd, "%.1lf\n", + waypointp->gc_data->terr / 10.0); + switch (waypointp->gc_data->container) + { + case gc_unknown: v = 1; break; + case gc_micro: v = 2; break; + case gc_regular: v = 3; break; + case gc_large: v = 4; break; + case gc_virtual: v = 5; break; + case gc_other: v = 6; break; + case gc_small: v = 8; break; + default: v = 1; break; + } + gbfprintf(ofd, "%d\n", v); + } gbfprintf(ofd, "\n"); } -- 2.30.2